草庐IT

C++ 指向 vector 的指针

全部标签

c++ - 为什么有人需要指向指针的指针?

例如,为什么需要char**myVariable;?如果一个指针只是内存中的一个地址,那么如果它是一个指向地址的指针和一个指向字符地址的指针,而不是一个指向一个字符地址的指针,为什么会有什么不同呢?在汇编中不会这样LDRR3,=myVariableLDRR2,=[R3]LDRR1,=[R2]LDRR0,=[R1]单个指针所在的位置LDRR1,=myVariableLDRR0,=[R1]现在R0持有值(value)?显然这种方式更快。 最佳答案 如果您想通过函数修改指针的值,则必须通过引用将指针的地址传递给函数。因此,您将需要指向指针

c++ - 为什么 std::vector max_size() 函数会返回 -1?

我有一个std::vectorm_vData;m_vData.max_size()总是返回-1。为什么会这样? 最佳答案 可能是因为您在查看之前将其分配给签名类型。max_size的返回值通常是size_t,这是一个无符号类型。在许多平台上直接转换为int将返回-1。试试下面的方法std::vector::size_typev1=myVector.max_size(); 关于c++-为什么std::vectormax_size()函数会返回-1?,我们在StackOverflow上找到一

c++ - 在 C++ 中检查空指针的首选方法是什么?

选项A:if(NULL==pSomethingColumn)//Yes,weuseYodaconditionsif(NULL!=pSomethingColumn)或者if(pSomethingColumn)if(!pSomethingColumn)我也在寻找解释推理的引用资料。我听说有人说从技术上讲,NULL不必定义为0,但是拜托!如果是这样的话,那么傻瓜(我们的应用程序)就会以-2147483648不同的方式崩溃。所以,如果NULL!=0,那么我们就会遇到大问题。请帮我解决一场毫无意义的语法辩论。我并不特别喜欢这两种方式。只是在寻找官方方式。谢谢。附言我们正在使用VisualStud

c++ - shared_ptr 与指针共存

我有一个函数如下voida(shared_ptrval){...}有时候,我想传入一个堆分配的对象shared_ptrv(newX());a(v);其他时候,我想传入一个堆栈分配的对象classC{//doesn'tworkproperlyb/cwhentheshared_ptrdiesitwilltrytodeletex...C(){a(shared_ptr(&x));}Xx;};让函数接受智能指针,同时让智能指针引用堆栈分配对象的最佳方法是什么?或者我应该走Java路线并从堆中分配所有内容? 最佳答案 我只想让函数采用这样的模板

c++ - 从具有 O(1) 运行时间的 vector 中删除元素

"写一个函数,输入一个vector类型的对象在常数时间O(1)[常数]中删除第k个元素。假设元素的顺序无关紧要。”我想我可能对此有所了解。但是,当我开始尝试使用.erase()时,我查看了大O符号是什么,发现它是O(n),就像线性关系一样。我暂时想不出任何其他方式。我不想要任何代码,但我认为如果有人可以提供帮助,伪代码至少会为我指明正确的方向 最佳答案 Assumethattheorderofelementsdoesnotmatter.这是你需要注意的。假设你有一个vector0123456你想删除3。你可以把它变成012645在O

c++ - std::list、std::vector 方法和 malloc()

在中断处理程序下使用STL:list和STL::vector类型我想避免调用malloc()。问题:防止在STL列表和vector中调用malloc()的最佳方法是什么?创建具有预定义大小的结构然后避免push/pop/erase调用就足够了吗?提前致谢 最佳答案 std::list和std::vector等STL容器具有接受Allocator类型的构造函数。通过提供您自己的分配器而不是使用默认分配器,您可以控制容器分配内存的方式。这个选项很少使用,但是在实时环境中使用你自己的分配器是一个很好的例子,说明了这个特性在哪里有用(并证明

c++ - 指针数组

如何获得指向对象(类)的指针数组?我需要为它们动态分配空间,数组的长度直到运行时才确定。任何人都可以解释并告诉我如何定义它吗?并可能向他们解释它是如何工作的,这真的很好:) 最佳答案 改用std::vector。它旨在根据需要动态调整集合的大小。#include//...std::vectorvec;vec.push_back(my_class_ptr);Class*ptr=vec[0]; 关于c++-指针数组,我们在StackOverflow上找到一个类似的问题:

c++ - push_back() 是否总是增加 vector 的大小?

我有一段代码创建了一个已知大小的std::vector:std::vectorvectorOfTs(n);是否调用push_back将大小增加到n+1?vectorOfTs.push_back(T()); 最佳答案 是的;注意vector.capacity()不同于vector.size().后者表示当前vector中的元素数,而前者表示适合当前分配给vector内部缓冲区的空间的项目数。 关于c++-push_back()是否总是增加vector的大小?,我们在StackOverflo

C++老师告诉我不要用指针

昨天我的老师告诉我不要使用指针,除非我想编写一些非常低级的东西。他说垃圾收集器会为我做所有事情,所以指针基本上是低效和危险的。我很生气,因为我以前听过不同之处。那么什么是对的,什么是错的呢?我应该使用指针吗?如果没有,为什么在没有人使用的情况下还要实现它们? 最佳答案 在C++中使用垃圾收集器需要严格的纪律,而且还需要相当称职的程序员,即使在C++11中增加了对垃圾收集的支持也是如此。所以你的老师可能是别的意思。可能他/她的意思是您应该优先使用标准库容器(如vector和string)和智能指针来处理您必须处理的所有权处理指针。这是

c++ - 如何优化指针间接层

我正在尝试在繁重的计算应用程序中优化这类事情:说我有一个doubled[500][500][500][500];至少从编译器的角度来看,以下是相当昂贵的doubled[x][y][j][k]我想告诉编译器它是连续的内存,以方便计算偏移量。在我的例子中,我有这样的东西:doublen=0;for(inti=0;i所以我试图通过将它放在一个单独的函数中来优化它voidfunc(double***constrestrictdMatrix){/*anddosomecalculationsherel*/}没有太大帮助:(有什么优化建议吗?编辑我无法重写代码使数组成为一维。我必须和这个多维的野兽一